import Foundation
import CoreData
import FMDB

class FileStorageManager {
    // MARK: - UserDefaults（轻量级键值对存储）
    static func saveToUserDefaults(key: String, value: String) {
        UserDefaults.standard.set(value, forKey: key)
        UserDefaults.standard.synchronize()
    }
    
    static func getFromUserDefaults(key: String) -> String? {
        return UserDefaults.standard.string(forKey: key)
    }
    
    // MARK: - 文件存储（文档目录操作）
    static func saveToFile(data: String, fileName: String) throws {
        guard let documentsDir = FileManager.default.urls(
            for: .documentDirectory, in: .userDomainMask
        ).first else { throw NSError(domain: "FileError", code: 0, userInfo: nil) }
        
        let fileURL = documentsDir.appendingPathComponent(fileName)
        try data.write(to: fileURL, atomically: true, encoding: .utf8)
    }
    
    static func readFromFile(fileName: String) -> String? {
        guard let documentsDir = FileManager.default.urls(
            for: .documentDirectory, in: .userDomainMask
        ).first else { return nil }
        
        let fileURL = documentsDir.appendingPathComponent(fileName)
        return try? String(contentsOf: fileURL, encoding: .utf8)
    }
    
    // MARK: - SQLite（通过 FMDB 库实现，需手动导入）
    // 注：需先安装 FMDB 库（CocoaPods 或手动导入）
    // 示例代码需引入 import FMDB
    static func operateSQLite() {
        // 获取文档目录路径
        guard let documentsDir = FileManager.default.urls(
            for: .documentDirectory,
            in: .userDomainMask
        ).first else {
            print("获取文档目录失败")
            return
        }
        
        // 拼接数据库文件路径
        let dbURL = documentsDir.appendingPathComponent("test.db")
        let dbPath = dbURL.path
        
        // 初始化数据库
        let db = FMDatabase(path: dbPath)
        
        // 打开数据库
        if db.open() {
            print("数据库打开成功，路径：\(dbPath)")
            
            // 创建表
            let createTableSQL = "CREATE TABLE IF NOT EXISTS Users (id INTEGER PRIMARY KEY, name TEXT)"
            if db.executeUpdate(createTableSQL, withArgumentsIn: []) {
                print("表创建成功")
            } else {
                print("表创建失败: \(db.lastErrorMessage())")
            }
            
            // 插入数据
            let insertSQL = "INSERT INTO Users (name) VALUES (?)"
            if db.executeUpdate(insertSQL, withArgumentsIn: ["张三"]) {
                print("数据插入成功")
            } else {
                print("数据插入失败: \(db.lastErrorMessage())")
            }
            
            // 查询数据
            let querySQL = "SELECT * FROM Users"
            if let resultSet = db.executeQuery(querySQL, withArgumentsIn: []) {
                while resultSet.next() {
                    let id = resultSet.int(forColumn: "id")
                    let name = resultSet.string(forColumn: "name")
                    print("查询结果: ID=\(id), 名称=\(name ?? "")")
                }
            } else {
                print("查询失败: \(db.lastErrorMessage())")
            }
            
            // 关闭数据库
            db.close()
        } else {
            print("数据库打开失败: \(db.lastErrorMessage())")
        }
    }
//
//    // MARK: - Core Data（苹果官方持久化框架）
//    static func operateCoreData() {
//        // 获取 Core Data 上下文（需在 AppDelegate 中配置）
//        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate,
//              let context = appDelegate.persistentContainer.viewContext else { return }
//        
//        // 创建实体
//        let entity = NSEntityDescription.entity(forEntityName: "User", in: context)!
//        let user = NSManagedObject(entity: entity, insertInto: context)
//        
//        // 设置属性
//        user.setValue("李四", forKeyPath: "name")
//        
//        // 保存数据
//        do {
//            try context.save()
//            print("Core Data 数据保存成功")
//        } catch {
//            print("Core Data 保存失败：\(error.localizedDescription)")
//        }
//        
//        // 查询数据
//        let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "User")
//        do {
//            let results = try context.fetch(fetchRequest)
//            for user in results {
//                if let name = user.value(forKeyPath: "name") as? String {
//                    print("Core Data 查询结果：\(name)")
//                }
//            }
//        } catch {
//            print("Core Data 查询失败：\(error.localizedDescription)")
//        }
//    }
}
